# 小明需要走路从城市的一端前往另一端。城市可以视为一个长条形，共有 N 个街区，按顺序排成一列，每个街区的右侧紧挨着下一个街区的左侧。
# 初始时，小明位于第 1 个街区的左侧，他的目标是到达第 N个街区的右侧。步行通过第n个街区时，小明需要花费的时间为a(n)。
# 同时，小明可以选择坐最多 M 次地铁。每个街区的左侧都有地铁站，每次坐地铁可以穿越前方最少1个，最多 K个连续的街区。
# 坐地铁穿越任何一个街区所需的时间都是一个常数 B（如果穿越2个街区，所需的时间是2×B，以此类推）。进地铁站、出地铁站、等待地铁均不耗费时间。
# 求出需要的最小的时间 

# 前两行各包含一个正整数，分别对应 N和K。
# 第三行包含 N 个非负整数，以空格分隔，对应于步行穿过每个街区所消耗的时间。
# 后两行各包含一个非负整数，分别对应 B和M。
# 1 ≤ N ≤ 105, 1 ≤ K≤ 10,
# 0≤M≤ 10，以任何方式
# 通过单个街区所需要的时间（包括所有 an以及B 的值）不起过
# 104。

# 输出1个整数

# 样例：
# 输入：
# 5
# 1
# 3 7 5 3 6
# 0
# 2
# 输出
# 11

def min_time_to_reach_end(N, K, a, B, M):
    # 定义一个非常大的初始值
    INF = float("inf")

    # dp[i][j] 表示到达第 i 个街区使用 j 次地铁的最小时间
    dp = [[INF] * (M + 1) for _ in range(N + 1)]

    # 初始状态
    dp[0][0] = 0

    # 动态规划
    for i in range(1, N + 1): 
        # 步行情况
        for j in range(M + 1):
            dp[i][j] = dp[i - 1][j] + a[i - 1]  # 步行到达 i

        # 坐地铁的情况
        for j in range(1, M + 1):
            for k in range(1, min(K, i) + 1):
                dp[i][j] = min(dp[i][j], dp[i - k][j - 1] + k * B)  # 地铁到达 i

    # 返回最小时间
    return min(dp[N])


# 输入读取
N = int(input())
K = int(input())
a = list(map(int, input().split()))
B = int(input())
M = int(input())

# 输出结果
print(min_time_to_reach_end(N, K, a, B, M))
